#pragma once
#ifndef CLIB_LOG_H
#define CLIB_LOG_H

#include "clib_type.h"

#ifdef __cplusplus
extern "C" {
#endif

#define LOG_MAX_TYPE      32

typedef enum {
    clib_log_level_emerg  = 1,
    clib_log_level_alert  = 2,
    clib_log_level_crit   = 3,
    clib_log_level_error  = 4,
    clib_log_level_warn   = 5,
    clib_log_level_notice = 6,
    clib_log_level_debug  = 7,
    clib_log_level_info   = 8,
    clib_log_level_max    = 9
} log_level_t;

#define clib_type_default   0

/**
 * @brief clib 库日志初始化
 * 
 * @param file  日志文件名称
 * @param type  日志类型
 * @param level 日志等级
 * @return
 *  -  0 成功
 *  - -1 失败 
 */
i32_t clib_log_init(const i08_t* file, u32_t type, log_level_t level);

/**
 * @brief clib 设置日志等级
 * 
 * @param type  日志类型
 * @param level 日志等级
 */
void  clib_set_log_level(i32_t type, log_level_t level);


/**
 * @brief clib 日志写入参数
 * 
 * @param type  日志类型
 * @param level 日志等级
 * @param fmt   格式化格式
 * @param ...   格式化参数
 * @return
 *  - >0 写入日志的长度
 *  - -1 失败 
 */
i32_t clib_log_write(i32_t type, log_level_t level, const i08_t *fmt, ...);


#define clib_log_emerg(fmt, args...)   clib_log_write(clib_log_level_emerg, clib_type_default, fmt, ##args)
#define clib_log_alert(fmt, args...)   clib_log_write(clib_log_level_alert, clib_type_default, fmt, ##args)
#define clib_log_crit(fmt, args...)    clib_log_write(clib_log_level_crit,  clib_type_default, fmt, ##args)
#define clib_log_error(fmt, args...)   clib_log_write(clib_log_level_error, clib_type_default, fmt, ##args)
#define clib_log_warn(fmt, args...)    clib_log_write(clib_log_level_warn,  clib_type_default, fmt, ##args)
#define clib_log_notice(fmt, args...)  clib_log_write(clib_log_level_notice,clib_type_default, fmt, ##args)
#define clib_log_info(fmt, args...)    clib_log_write(clib_log_level_info,  clib_type_default, fmt, ##args)
#define clib_log_debug(fmt, args...)   clib_log_write(clib_log_level_debug, clib_type_default, fmt, ##args)
#define clib_log_stderr(fmt, args...)  clib_log_write(clib_log_level_crit,  clib_type_default, fmt, ##args)

#ifdef __cplusplus
}
#endif

#endif